<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <title>回顾Object.defineProperty</title>
</head>

<body>

  <script>
    let number = 3
    let person = {
      name: '张三',
      sex: '男',
      // age: 18
    }
    // console.log(Object.keys(person)) // name sex age

    // 添加的属性默认不可被枚举
    Object.defineProperty(person, 'age', {
      // value: 18,
      // enumerable: true, // 控制属性是否可以枚举 默认：false
      // writable: true, // 控制属性是否可以被修改 默认：false
      // configurable: true, // 控制属性是否可以被删除 默认：false

      // 当有人读取person的age属性时，get函数就会被调用，且返回值就是age的值
      get() {
        console.log('有人读取age属性了')
        return number
      },

      // 当有人修改person的age属性时，set函数(setter)就会被调用，且会收到修改的具体值
      set(value) {
        console.log('有人修改了age属性，且值是：', value)
        number = value
      }
    })

    console.log(Object.keys(person)) // name sex

    console.log(person)
  </script>
</body>

</html>